// 导入express框架
const express = require('express');
// 创建express实例
const app = express();
//导入cors实现 cors跨域
const cors = require('cors')
//导入body-parser
const bodyParser = require('body-parser')
// 全局挂载
app.use(cors())

// Multer 是一个 node.js 中间件，用于处理 multipart/form-data 类型的表单数据，它主要用于上传文件。
const multer = require("multer");

// 在server服务端下新建一个public文件，在public文件下新建upload文件用于存放图片
const upload = multer({ dest:'./public/upload' })
app.use(upload.any())//使用中间件
// 静态托管
app.use(express.static("./public"));


// 当extended为false时,值为字数组或符串,当为true时为任意类型
app.use(bodyParser.urlencoded({
	extended: false
}))
// parse.application/json
app.use(bodyParser.json())

// 对错误中间件进行一个挂载
app.use((req, res, next) => {
	// status=0未为成功,=1为失败,默认设为1,方便处理失败的情况
	res.cc = (err, status = 1) => {
		res.send({
			status,
			// 判断这个error是错误对象还是错误字符串
			message: err instanceof Error ? err.message : err,
		})
	}
	next() //如果路由没有错的话就会返回登陆的操作
})

// 导入jwt
const jwtconfig = require('./jwt_config/index.js') //导入jwt的配置文件
// 导入express_jwt
const {
	expressjwt: jwt
} = require('express-jwt')
// app.use(jwt({
// 	secret: jwtconfig.jwtSecretKey,
// 	algorithms: ['HS256']
// }).unless({
// 	path: [/^\/api\//]
// }))

const loginRouter = require('./router/login')
const Joi=require('joi')
app.use('/api', loginRouter) //路由需要在api才能够访问得到
const userRouter = require('./router/userinfo.js')
app.use('/user', userRouter)

// 新建一个错误中间件,用于对不符合joi验证规则的值进行一个报错
app.use((err, req, res, next) => {
	// 判断错误是否为Joi验证错误
	if (err instanceof Joi.ValidationError) {
		return res.cc(err);
	}
	// 如果是其他错误，继续传递
	next(err);
});

// 绑定和侦听主机和接口
app.listen(3007, () => {
	console.log('http://127.0.0.1:3007')
})